﻿namespace Cordyceps.Elasticsearch.Tool.Options;

/// <summary>
/// Elasticsearch连接配置选项
/// </summary>
public class ElasticsearchOptions
{
    /// <summary>
    /// 配置节点名称，对应appsettings.json中的配置节
    /// </summary>
    public const string SectionName = "Elasticsearch";
    
    /// <summary>
    /// Elasticsearch节点地址列表（必需）
    /// 格式: ["http://localhost:9200", "http://node2:9200"]
    /// </summary>
    public string[] Nodes { get; set; } = Array.Empty<string>();
    
    /// <summary>
    /// 用户名（可选，用于基本认证）
    /// </summary>
    public string? Username { get; set; }
    
    /// <summary>
    /// 密码（可选，用于基本认证）
    /// </summary>
    public string? Password { get; set; }
    
    /// <summary>
    /// 证书指纹（可选，用于SSL/TLS证书验证）
    /// </summary>
    public string? CertificateFingerprint { get; set; }
    
    /// <summary>
    /// 默认索引名称（可选，用于未指定索引的操作）
    /// </summary>
    public string? DefaultIndex { get; set; }
    
    /// <summary>
    /// 连接超时时间（秒，默认30秒）
    /// </summary>
    public int RequestTimeoutSeconds { get; set; } = 30;
    
    /// <summary>
    /// 是否启用调试模式（默认false）
    /// 启用后会记录更详细的请求和响应信息
    /// </summary>
    public bool EnableDebugMode { get; set; } = false;
    
    /// <summary>
    /// 最大重试次数（默认3次）
    /// </summary>
    public int MaxRetries { get; set; } = 3;
    
    /// <summary>
    /// 是否禁用SSL证书验证（默认false，生产环境应始终为false）
    /// 仅用于开发环境或测试环境
    /// </summary>
    public bool DisableSslVerification { get; set; } = false;
}